Aã¹ã¿ãŒïŒA*ïŒçµè·¯æ¢çŽ¢ã¢ã«ãŽãªãºã ããå®è·µçãªå®è£ äŸãšå€æ§ãªåéã§ã®å®äžçã¢ããªã±ãŒã·ã§ã³ã«çŠç¹ãåœãŠãŠåŠã³ãŸãã广çãªããã²ãŒã·ã§ã³ãœãªã¥ãŒã·ã§ã³ã®ããã®æ žãšãªãæŠå¿µãæé©åæè¡ãããªãšãŒã·ã§ã³ãçè§£ããŸãããã
ãã¹ãã©ã³ãã³ã°ïŒAã¹ã¿ãŒïŒA*ïŒã¢ã«ãŽãªãºã å®è£ ã®å æ¬çã¬ã€ã
çµè·¯èšç»ã¯ãããããå·¥åŠãã²ãŒã éçºãããžã¹ãã£ã¯ã¹ãèªåé転è»ãªã©ãå€ãã®åéã«ãããåºæ¬çãªåé¡ã§ãããã®ç®æšã¯ãé害ç©ãé¿ããªãããéå§ç¹ãšç®æšç¹ã®éã§æé©ïŒãŸãã¯ã»ãŒæé©ïŒãªçµè·¯ãèŠã€ããããšã§ããæ§ã ãªçµè·¯æ¢çŽ¢ã¢ã«ãŽãªãºã ã®äžã§ããAã¹ã¿ãŒïŒA*ïŒã¢ã«ãŽãªãºã ã¯ããã®å¹çæ§ãšæ±çšæ§ã§éç«ã£ãŠããŸãã
Aã¹ã¿ãŒïŒA*ïŒã¢ã«ãŽãªãºã ãšã¯ïŒ
A*ã¯ãæ å ±æ¢çŽ¢ã¢ã«ãŽãªãºã ã§ãããäžããããããŒãããç®æšã«å°éãããŸã§ã®ã³ã¹ããæšå®ããããã«ãã¥ãŒãªã¹ãã£ãã¯é¢æ°ã䜿çšããŸããããã¯ããã€ã¯ã¹ãã©æ³ïŒæççµè·¯ãèŠã€ããããšãä¿èšŒããïŒãšæ¬²åŒµãæè¯åªå æ¢çŽ¢ïŒããé«éã§ãããå¿ ãããæé©ãªçµè·¯ãèŠã€ãããšã¯éããŸããïŒã®å©ç¹ãçµã¿åãããŠããŸããA*ã¢ã«ãŽãªãºã ã¯ã以äžã®è©äŸ¡é¢æ°ã«åºã¥ããŠããŒãã®åªå é äœã決å®ããŸãã
f(n) = g(n) + h(n)
f(n): ããŒãnãééããæãå®äŸ¡ãªè§£ã®æšå®ã³ã¹ããg(n): éå§ããŒãããããŒãnã«å°éãããŸã§ã®å®éã®ã³ã¹ããh(n): ããŒãnããç®æšããŒãã«å°éãããŸã§ã®æšå®ã³ã¹ãïŒãã¥ãŒãªã¹ãã£ãã¯ïŒã
ãã¥ãŒãªã¹ãã£ãã¯é¢æ°h(n)ã¯ãA*ã®æ§èœã«ãšã£ãŠæ¥µããŠéèŠã§ããé©åã«éžæããããã¥ãŒãªã¹ãã£ãã¯ã¯ãæ¢çŽ¢ããã»ã¹ã倧å¹
ã«å éãããããšãã§ããŸãããã ãããã¥ãŒãªã¹ãã£ãã¯ã¯èš±å®¹çã§ããå¿
èŠããããç®æšã«å°éãããŸã§ã®ã³ã¹ããé倧è©äŸ¡ããŠã¯ãªããŸããã蚱容çã§ãªããã¥ãŒãªã¹ãã£ãã¯ã¯ãæé©ã§ãªãçµè·¯ã«ã€ãªããå¯èœæ§ããããŸãã
Aã¹ã¿ãŒã¢ã«ãŽãªãºã ã®ä»çµã¿ïŒã¹ããããã€ã¹ããã
- åæå:
- è©äŸ¡ãå¿ èŠãªããŒããæ ŒçŽããããã®ãªãŒãã³ãªã¹ããäœæããŸãã
- ãã§ã«è©äŸ¡ãããããŒããæ ŒçŽããããã®ã¯ããŒãºããªã¹ããäœæããŸãã
- éå§ããŒãããªãŒãã³ãªã¹ãã«è¿œå ããŸãã
g(start) = 0ãšh(start) = éå§ããç®æšãŸã§ã®æšå®ã³ã¹ããèšå®ããŸããf(start) = g(start) + h(start)ãèšå®ããŸãã
- ç¹°ãè¿ã:
ãªãŒãã³ãªã¹ãã空ã§ãªãé:
- ãªãŒãã³ãªã¹ãããæãäœã
f(n)å€ãæã€ããŒããååŸããŸãããã®ããŒããçŸåšã®ããŒããšåŒã³ãŸãã - çŸåšã®ããŒãããªãŒãã³ãªã¹ãããåé€ããã¯ããŒãºããªã¹ãã«è¿œå ããŸãã
- çŸåšã®ããŒããç®æšããŒãã§ããå Žåãçµè·¯ãåæ§ç¯ããŠè¿ããŸãã
- çŸåšã®ããŒãã®å飿¥ããŒãã«ã€ããŠ:
- 飿¥ããŒããééäžå¯èœã§ãããããŸãã¯ã¯ããŒãºããªã¹ãã«å«ãŸããŠããå Žåãç¡èŠããŸãã
- 飿¥ããŒãã®æ«å®çãª
g(n)å€ãèšç®ããŸãïŒg(neighbor) = g(current) + cost(current to neighbor)ïŒã - 飿¥ããŒãããªãŒãã³ãªã¹ãã«å«ãŸããŠããªãããŸãã¯æ«å®çãª
g(n)å€ã飿¥ããŒãã®çŸåšã®g(n)å€ãããäœãå Žå: - 飿¥ããŒãã®
g(n)å€ãæ«å®çãªg(n)å€ã«èšå®ããŸãã - 飿¥ããŒãã®
h(n)å€ã飿¥ããŒãããç®æšãŸã§ã®æšå®ã³ã¹ãã«èšå®ããŸãã - 飿¥ããŒãã®
f(n)å€ãg(n) + h(n)ã«èšå®ããŸãã - 飿¥ããŒãã®èŠªãçŸåšã®ããŒãã«èšå®ããŸãã
- 飿¥ããŒãããªãŒãã³ãªã¹ãã«å«ãŸããŠããªãå ŽåããªãŒãã³ãªã¹ãã«è¿œå ããŸãã
- ãªãŒãã³ãªã¹ãããæãäœã
- çµè·¯ãªã:
ãªãŒãã³ãªã¹ãã空ã«ãªããç®æšããŒãã«å°éããŠããªãå Žåãéå§ããŒãããç®æšããŒããžã®çµè·¯ã¯ãããŸããã
- çµè·¯ã®åæ§ç¯:
ç®æšããŒãã«å°éããããç®æšããŒãããéå§ããŒããŸã§èŠªãã€ã³ã¿ããã©ã£ãŠçµè·¯ãåæ§ç¯ã§ããŸãã
é©åãªãã¥ãŒãªã¹ãã£ãã¯é¢æ°ã®éžæ
ãã¥ãŒãªã¹ãã£ãã¯é¢æ°ã®éžæã¯ãA*ã¢ã«ãŽãªãºã ã®æ§èœã«å€§ãã圱é¿ããŸãã以äžã«ãäžè¬çãªãã¥ãŒãªã¹ãã£ãã¯é¢æ°ãããã€ã瀺ããŸãã
- ãã³ããã¿ã³è·é¢: 座æšã®çµ¶å¯Ÿå·®ã®åèšãèšç®ããŸããç§»åãæ°Žå¹³ããã³åçŽæ¹åã«å¶éãããã°ãªããããŒã¹ã®ç°å¢ã«é©ããŠããŸããåŒïŒ
h(n) = |x1 - x2| + |y1 - y2|ïŒããã§(x1, y1)ã¯çŸåšã®ããŒãã®åº§æšã(x2, y2)ã¯ç®æšããŒãã®åº§æšïŒãäŸïŒãã¥ãŒãšãŒã¯ã®ãã³ããã¿ã³ã®åžè¡å°ãããã²ãŒãããå Žåã - ãŠãŒã¯ãªããè·é¢: 2ç¹éã®çŽç·è·é¢ãèšç®ããŸããç§»åãå¶éãããªãç°å¢ã«é©ããŠããŸããåŒïŒ
h(n) = sqrt((x1 - x2)^2 + (y1 - y2)^2)ãäŸïŒéããå Žæã§ãããŒã³ã®æççµè·¯ãèŠã€ããå Žåã - 察è§ç·è·é¢: 察è§ç·æ¹åã®ç§»åãèæ ®ããŸãã察è§ç·æ¹åã®ç§»åãèš±å¯ãããŠããã°ãªããããŒã¹ã®ç°å¢ã«é©ããŠããŸããäŸïŒå€ãã®ãªã¢ã«ã¿ã€ã ã¹ãã©ããžãŒã²ãŒã ã§ã¯å¯Ÿè§ç·ç§»åã䜿çšãããŸãã
- ãã§ãã·ã§ãè·é¢: 座æšã®çµ¶å¯Ÿå·®ã®æå€§å€ãèšç®ããŸãã察è§ç·ç§»åãçŽäº€ç§»åãšåãã³ã¹ãã§ããå Žåã«é©ããŠããŸããåŒïŒ
h(n) = max(|x1 - x2|, |y1 - y2|)ãäŸïŒããããè»žã«æ²¿ã£ãç§»åãçããã³ã¹ãããããããããå·¥åŠã®ã¢ããªã±ãŒã·ã§ã³ã
蚱容çãªãã¥ãŒãªã¹ãã£ãã¯ãéžæããããšãäžå¯æ¬ ã§ãã蚱容çã§ãªããã¥ãŒãªã¹ãã£ãã¯ã䜿çšãããšãã¢ã«ãŽãªãºã ãæé©ã§ãªãçµè·¯ãèŠã€ããå¯èœæ§ããããŸããããšãã°ããŠãŒã¯ãªããè·é¢ã䜿çšããŠããå Žåãããã1ãã倧ãã宿°ã§åçŽã«æããããšã¯ã§ããŸããã
Aã¹ã¿ãŒã¢ã«ãŽãªãºã ã®å®è£ ïŒå®è·µäŸïŒPythonïŒ
以äžã«ãA*ã¢ã«ãŽãªãºã ã®Pythonå®è£ ã瀺ããŸãããã®äŸã¯ã°ãªããããŒã¹ã®ç°å¢ã䜿çšããŠããŸãã
import heapq
def a_star(grid, start, goal):
"""Implements the A* pathfinding algorithm.
Args:
grid: A 2D list representing the environment.
0: traversable, 1: obstacle
start: A tuple (row, col) representing the starting point.
goal: A tuple (row, col) representing the goal point.
Returns:
A list of tuples representing the path from start to goal,
or None if no path exists.
"""
rows, cols = len(grid), len(grid[0])
def heuristic(a, b):
# Manhattan distance heuristic
return abs(a[0] - b[0]) + abs(a[1] - b[1])
def get_neighbors(node):
row, col = node
neighbors = []
for dr, dc in [(0, 1), (0, -1), (1, 0), (-1, 0)]:
new_row, new_col = row + dr, col + dc
if 0 <= new_row < rows and 0 <= new_col < cols and grid[new_row][new_col] == 0:
neighbors.append((new_row, new_col))
return neighbors
open_set = [(0, start)] # Priority queue (f_score, node)
came_from = {}
g_score = {start: 0}
f_score = {start: heuristic(start, goal)}
while open_set:
f, current = heapq.heappop(open_set)
if current == goal:
path = []
while current in came_from:
path.append(current)
current = came_from[current]
path.append(start)
path.reverse()
return path
for neighbor in get_neighbors(current):
tentative_g_score = g_score[current] + 1 # Assuming cost of 1 to move to neighbor
if neighbor not in g_score or tentative_g_score < g_score[neighbor]:
came_from[neighbor] = current
g_score[neighbor] = tentative_g_score
f_score[neighbor] = tentative_g_score + heuristic(neighbor, goal)
heapq.heappush(open_set, (f_score[neighbor], neighbor))
return None # No path found
# Example usage:
grid = [
[0, 0, 0, 0, 0],
[0, 1, 0, 1, 0],
[0, 0, 0, 0, 0],
[0, 1, 1, 1, 0],
[0, 0, 0, 0, 0],
]
start = (0, 0)
goal = (4, 4)
path = a_star(grid, start, goal)
if path:
print("Path found:", path)
else:
print("No path found.")
説æ:
- `a_star`颿°ã¯ãã°ãªãããéå§ç¹ãããã³ç®æšç¹ãå ¥åãšããŠåãåããŸãã
- `heuristic`颿°ã¯ãã³ããã¿ã³è·é¢ãèšç®ããŸãã
- `get_neighbors`颿°ã¯æå¹ãªé£æ¥ããŒããè¿ããŸãã
- `open_set`ã¯ãè©äŸ¡ãããããŒããæ ŒçŽããåªå 床ãã¥ãŒã§ãã
- `came_from`èŸæžã¯ãçµè·¯å ã®åããŒãã®èŠªãæ ŒçŽããŸãã
- `g_score`èŸæžã¯ãéå§ç¹ããåããŒãã«å°éãããŸã§ã®ã³ã¹ããæ ŒçŽããŸãã
- `f_score`èŸæžã¯ãåããŒãããç®æšç¹ã«å°éãããŸã§ã®æšå®ã³ã¹ããæ ŒçŽããŸãã
- ã¡ã€ã³ã«ãŒãã¯ãç®æšãèŠã€ããããªãŒãã³ã»ããã空ã«ãªããŸã§ç¹°ãè¿ãããŸãã
A*ã®æé©åãšããªãšãŒã·ã§ã³
A*ã¯åŒ·åãªã¢ã«ãŽãªãºã ã§ãããç¹å®ã®ã·ããªãªã§ãã®æ§èœãåäžãããããšãã§ããããã€ãã®æé©åãšããªãšãŒã·ã§ã³ããããŸãã
- ãžã£ã³ããã€ã³ãæ¢çŽ¢ïŒJPSïŒ: ã°ãªããã®çŽç·ã»ã°ã¡ã³ããããžã£ã³ããããããšã§ãæ¢çŽ¢ãããããŒãã®æ°ãæžãããŸããåäžã³ã¹ãã®ã°ãªããç°å¢ã§å¹æçã§ãã
- ã·ãŒã¿ã¹ã¿ãŒïŒTheta*ïŒ: ã°ãªããã®ãšããžã«å¶éãããªãçµè·¯æ¢çŽ¢ãå¯èœã«ããŸããããŒãéã®èŠç·ïŒline-of-sightïŒãèæ ®ããããšã§ãããçãçŸå®çãªçµè·¯ãèŠã€ããããšãã§ããŸãã
- å埩深åAã¹ã¿ãŒïŒIDA*ïŒ: ã³ã¹ãå¶éä»ãã®æ·±ãåªå æ¢çŽ¢ã䜿çšããã¡ã¢ãªäœ¿çšéãæããŸããéåžžã«å€§ããªæ¢çŽ¢ç©ºéã«åœ¹ç«ã¡ãŸãã
- éã¿ä»ãAã¹ã¿ãŒïŒWeighted A*ïŒ: ãã¥ãŒãªã¹ãã£ãã¯é¢æ°ã«éã¿ãæããããšã§å€æŽããŸããç®æšãžã®æ¢çŽ¢ãåªå ããããšã§ãæé©ã§ãªãçµè·¯ãããéãèŠã€ããããšãã§ããŸãã絶察çãªæççµè·¯ãèŠã€ããããšããããååãªçµè·¯ãè¿ éã«èŠã€ããããšãéèŠãªå Žåã«æçšã§ãã
- åçAã¹ã¿ãŒïŒD*ïŒ: åæçµè·¯èšç®åŸã«ç°å¢ãå€åããå Žåã«å¯Ÿå¿ããŸããé害ç©ãåºçŸãããæ¶ãããããåçãªç°å¢ã«é©ããŠããŸããäºæž¬äžèœãªç°å¢ã§ã®èªåŸããã²ãŒã·ã§ã³ã®ããããå·¥åŠã§äžè¬çã«äœ¿çšãããŸãã
- éå±€çAã¹ã¿ãŒïŒHierarchical A*ïŒ: ç°å¢ã®éå±€ç衚çŸã䜿çšããŠæ¢çŽ¢ç©ºéãåæžããŸãããŸãããããã®ç²ã衚çŸã§é«ã¬ãã«ã®çµè·¯ãèšç»ãããã®åŸããã现ããã¬ãã«ã®ãã£ããŒã«ã§çµè·¯ãæŽç·ŽããŸãããã®ã¢ãããŒãã¯ãå€§èŠæš¡ã§è€éãªç°å¢ã§ã®é·è·é¢çµè·¯èšç»ã«åœ¹ç«ã¡ãŸãã
Aã¹ã¿ãŒã¢ã«ãŽãªãºã ã®å®äžçã§ã®å¿çš
A*ã¢ã«ãŽãªãºã ã¯ã以äžãå«ãå¹ åºãã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšãããŠããŸãã
- ã²ãŒã éçº: ãã£ã©ã¯ã¿ãŒã®ç§»åãAIããã²ãŒã·ã§ã³ãéãã¬ã€ã€ãŒãã£ã©ã¯ã¿ãŒïŒNPCïŒã®çµè·¯æ¢çŽ¢ãäŸïŒStarCraftã®ãããªæŠç¥ã²ãŒã ãThe Witcherã®ãããªRPGã
- ããããå·¥åŠ: ããããã®ããã²ãŒã·ã§ã³ãèªåŸããããã®çµè·¯èšç»ãé害ç©åé¿ãäŸïŒèªåé転æé€æ©ãå庫ããããã
- ããžã¹ãã£ã¯ã¹ãšãµãã©ã€ãã§ãŒã³: é éãã©ãã¯ã®çµè·¯èšç»ãç§»åæéãšçææ¶è²»ãæå°éã«æããããã®é éçµè·¯ã®æé©åãäŸïŒFedExãUPSãDHLã®ãããªé éãµãŒãã¹ã¯ãã°ããŒãã«ãªé éçµè·¯ãæé©åããããã«çµè·¯æ¢çŽ¢ã¢ã«ãŽãªãºã ã䜿çšããŠããŸãã
- èªåé転è»: èªåé転è»ããããŒã³ã®çµè·¯èšç»ãå®å šã§å¹ççãªããã²ãŒã·ã§ã³ã®ç¢ºä¿ãäŸïŒTesla AutopilotãWaymoã®èªåé転æè¡ãèªåé転è»ã¯ã亀éç¶æ³ãæ©è¡è ã®åããéè·¯ééãªã©ãèæ ®ããªãããè€éãªéœåžç°å¢ãããã²ãŒãããå¿ èŠããããŸãã
- GPSããã²ãŒã·ã§ã³ã·ã¹ãã : 亀éç¶æ³ãéè·¯ééãèæ ®ãã2ç¹éã®æçãŸãã¯æéçµè·¯ãèŠã€ãããäŸïŒGoogleããããAppleãããã
- å»çç»å: äœäŸµè¥²æè¡ã®ããã®çµè·¯èšç»ãéèŠãªèåšãé¿ããªããäœå ãå€ç§åšå ·ã§èªå°ããã
- ãããã¯ãŒã¯ã«ãŒãã£ã³ã°: ããŒã¿ãã±ããããããã¯ãŒã¯ãä»ããŠç§»åããããã®æççµè·¯ãèŠã€ããã
- ãããªã²ãŒã ã®ã¬ãã«ãã¶ã€ã³: çµè·¯æ¢çŽ¢ã®å¶çŽã«åºã¥ããŠãªããžã§ã¯ããèªåçã«é 眮ããã
Aã¹ã¿ãŒã¢ã«ãŽãªãºã ã®å©ç¹ã𿬠ç¹
å©ç¹:
- æé©æ§: ãã¥ãŒãªã¹ãã£ãã¯ã蚱容çã§ããã°ãæççµè·¯ãèŠã€ããããšãä¿èšŒããŸãã
- å¹çæ§: å¹ åªå æ¢çŽ¢ãæ·±ãåªå æ¢çŽ¢ã®ãããªéæ å ±æ¢çŽ¢ã¢ã«ãŽãªãºã ãããå¹ççã§ãã
- æ±çšæ§: 倿§ãªç°å¢ãã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšã§ããŸãã
æ¬ ç¹:
- ã¡ã¢ãªæ¶è²»: ç¹ã«å€§ããªæ¢çŽ¢ç©ºéã®å ŽåããªãŒãã³ãªã¹ããšã¯ããŒãºããªã¹ããæ ŒçŽããããã«ããªãã®ã¡ã¢ãªãå¿ èŠãšãªãããšããããŸãã
- ãã¥ãŒãªã¹ãã£ãã¯ãžã®äŸå: æ§èœã¯ãã¥ãŒãªã¹ãã£ãã¯é¢æ°ã®éžæã«å€§ããäŸåããŸããäžé©åã«éžæããããã¥ãŒãªã¹ãã£ãã¯ã¯ãæ¢çŽ¢ããã»ã¹ãèããé ãããå¯èœæ§ããããŸãã
- èšç®ã³ã¹ã:
f(n)ã®è©äŸ¡ã¯ãäžéšã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯èšç®ã³ã¹ããé«ããªãå¯èœæ§ããããŸãã
ã°ããŒãã«å®è£ ã®ããã®èæ ®äºé
A*ãã°ããŒãã«ãªã¢ããªã±ãŒã·ã§ã³ã«å®è£ ããéã«ã¯ã以äžã®ç¹ãèæ ®ããŠãã ããã
- 座æšç³»: å°ççé åã«é©ãã座æšç³»ãšå°å³æåœ±ã䜿çšããŸããç°ãªãå°åã§ã¯ç°ãªã座æšç³»ïŒäŸïŒWGS 84ãUTMïŒã䜿çšãããŸãã
- è·é¢èšç®: å°çã®æ²çãèæ ®ããããã«ãããŒããŒãµã€ã³å ¬åŒã®ãããªæ£ç¢ºãªè·é¢èšç®æ¹æ³ã䜿çšããŸããããã¯é·è·é¢ã®çµè·¯èšç»ã«ãšã£ãŠç¹ã«éèŠã§ãã
- ããŒã¿ãœãŒã¹: ä¿¡é Œã§ããææ°ã®å°å³ããŒã¿ãè©å€ã®è¯ããœãŒã¹ãã䜿çšããŸããGoogle Maps PlatformãMapboxãOpenStreetMapãªã©ã®ãããã€ããŒã®APIã®äœ¿çšãæ€èšããŠãã ããã
- æ§èœæé©å: å¹ççãªããŒã¿æ§é ãšã¢ã«ãŽãªãºã ã䜿çšããŠãã¢ã«ãŽãªãºã ã®æ§èœãæé©åããŸãããã£ãã·ã¥ã空éã€ã³ããã¯ã¹ãªã©ã®æè¡ã䜿çšããŠãæ¢çŽ¢ããã»ã¹ãé«éåããããšãæ€èšããŠãã ããã
- ããŒã«ã©ã€ãŒãŒã·ã§ã³: ã¢ã«ãŽãªãºã ãç°ãªãèšèªãæåçèæ¯ã«é©å¿ãããŸããäŸãã°ãç°ãªã枬å®åäœïŒäŸïŒããã¡ãŒãã« vs. ãã€ã«ïŒãç°ãªãäœæåœ¢åŒã®äœ¿çšãæ€èšããŠãã ããã
- ãªã¢ã«ã¿ã€ã ããŒã¿: 亀éç¶æ³ã倩æ°ãéè·¯ééãªã©ã®ãªã¢ã«ã¿ã€ã ããŒã¿ãçµã¿èŸŒã¿ãçµè·¯èšç»ã®ç²ŸåºŠãšä¿¡é Œæ§ãåäžãããŸãã
äŸãã°ãã°ããŒãã«ãªããžã¹ãã£ã¯ã¹ã¢ããªã±ãŒã·ã§ã³ãéçºããå Žåãå°åã«ãã£ãŠè©³çŽ°ã§æ£ç¢ºãªããŒã¿ãç°ãªãå¯èœæ§ããããããç°ãªãå°åã§ç°ãªãå°å³ããŒã¿ãœãŒã¹ã䜿çšããå¿ èŠããããããããŸããããŸããç°ãªãåœã§ã®èŒžéã«é¢ããç°ãªãèŠå¶ãå¶éãèæ ®ããå¿ èŠãããã§ãããã
çµè«
Aã¹ã¿ãŒã¢ã«ãŽãªãºã ã¯ãæ§ã ãªåéã§æ°å€ãã®å¿çšãæã€åŒ·åã§æ±çšæ§ã®é«ãçµè·¯æ¢çŽ¢ã¢ã«ãŽãªãºã ã§ããæ žãšãªãæŠå¿µãå®è£ ã®è©³çްãæé©åæè¡ãçè§£ããããšã§ãA*ã广çã«æŽ»çšããŠè€éãªçµè·¯èšç»åé¡ã解決ã§ããŸããé©åãªãã¥ãŒãªã¹ãã£ãã¯ãéžæããå®è£ ãæé©åããããšããæé©ãªæ§èœãéæããããã®éµãšãªããŸããæè¡ãé²åããã«ã€ããŠãA*ãšãã®ããªãšãŒã·ã§ã³ã¯ãäžçäžã§ã€ã³ããªãžã§ã³ããªããã²ãŒã·ã§ã³ãœãªã¥ãŒã·ã§ã³ãå¯èœã«ããäžã§åŒãç¶ãéèŠãªåœ¹å²ãæããã§ããããA*ãã°ããŒãã«èŠæš¡ã§å®è£ ããéã«ã¯ã座æšç³»ãçŸå°ã®èŠå¶ãªã©ã®ã°ããŒãã«ãªç¹æ§ãèæ ®ããããšãå¿ããªãã§ãã ããã